<!doctype html>
<html>
	<head>
		<meta charset='UTF-8'>
		<meta name='viewport' content='width=device-width initial-scale=1'>

		<link href='https://fonts.loli.net/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext'
			rel='stylesheet' type='text/css' />
		<style type='text/css'>
			html {
				overflow-x: initial !important;
			}

			:root {
				--bg-color: #ffffff;
				--text-color: #333333;
				--select-text-bg-color: #B5D6FC;
				--select-text-font-color: auto;
				--monospace: "Lucida Console", Consolas, "Courier", monospace;
				--title-bar-height: 20px;
			}

			.mac-os-11 {
				--title-bar-height: 28px;
			}

			html {
				font-size: 14px;
				background-color: var(--bg-color);
				color: var(--text-color);
				font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
				-webkit-font-smoothing: antialiased;
			}

			body {
				margin: 0px;
				padding: 0px;
				height: auto;
				bottom: 0px;
				top: 0px;
				left: 0px;
				right: 0px;
				font-size: 1rem;
				line-height: 1.42857143;
				overflow-x: hidden;
				background-image: inherit;
				background-size: inherit;
				background-attachment: inherit;
				background-origin: inherit;
				background-clip: inherit;
				background-color: inherit;
				tab-size: 4;
				background-position: inherit inherit;
				background-repeat: inherit inherit;
			}

			iframe {
				margin: auto;
			}

			a.url {
				word-break: break-all;
			}

			a:active,
			a:hover {
				outline: 0px;
			}

			.in-text-selection,
			::selection {
				text-shadow: none;
				background: var(--select-text-bg-color);
				color: var(--select-text-font-color);
			}

			#write {
				margin: 0px auto;
				height: auto;
				width: inherit;
				word-break: normal;
				word-wrap: break-word;
				position: relative;
				white-space: normal;
				overflow-x: visible;
				padding-top: 36px;
			}

			#write.first-line-indent p {
				text-indent: 2em;
			}

			#write.first-line-indent li p,
			#write.first-line-indent p * {
				text-indent: 0px;
			}

			#write.first-line-indent li {
				margin-left: 2em;
			}

			.for-image #write {
				padding-left: 8px;
				padding-right: 8px;
			}

			body.typora-export {
				padding-left: 30px;
				padding-right: 30px;
			}

			.typora-export .footnote-line,
			.typora-export li,
			.typora-export p {
				white-space: pre-wrap;
			}

			.typora-export .task-list-item input {
				pointer-events: none;
			}

			@media screen and (max-width: 500px) {
				body.typora-export {
					padding-left: 0px;
					padding-right: 0px;
				}

				#write {
					padding-left: 20px;
					padding-right: 20px;
				}

				.CodeMirror-sizer {
					margin-left: 0px !important;
				}

				.CodeMirror-gutters {
					display: none !important;
				}
			}

			#write li>figure:last-child {
				margin-bottom: 0.5rem;
			}

			#write ol,
			#write ul {
				position: relative;
			}

			img {
				max-width: 100%;
				vertical-align: middle;
			}

			button,
			input,
			select,
			textarea {
				color: inherit;
				font-family: inherit;
				font-size: inherit;
				font-style: inherit;
				font-variant-caps: inherit;
				font-weight: inherit;
				font-stretch: inherit;
				line-height: inherit;
			}

			input[type="checkbox"],
			input[type="radio"] {
				line-height: normal;
				padding: 0px;
			}

			*,
			::after,
			::before {
				box-sizing: border-box;
			}

			#write h1,
			#write h2,
			#write h3,
			#write h4,
			#write h5,
			#write h6,
			#write p,
			#write pre {
				width: inherit;
			}

			#write h1,
			#write h2,
			#write h3,
			#write h4,
			#write h5,
			#write h6,
			#write p {
				position: relative;
			}

			p {
				line-height: inherit;
			}

			h1,
			h2,
			h3,
			h4,
			h5,
			h6 {
				break-after: avoid-page;
				break-inside: avoid;
				orphans: 4;
			}

			p {
				orphans: 4;
			}

			h1 {
				font-size: 2rem;
			}

			h2 {
				font-size: 1.8rem;
			}

			h3 {
				font-size: 1.6rem;
			}

			h4 {
				font-size: 1.4rem;
			}

			h5 {
				font-size: 1.2rem;
			}

			h6 {
				font-size: 1rem;
			}

			.md-math-block,
			.md-rawblock,
			h1,
			h2,
			h3,
			h4,
			h5,
			h6,
			p {
				margin-top: 1rem;
				margin-bottom: 1rem;
			}

			.hidden {
				display: none;
			}

			.md-blockmeta {
				color: rgb(204, 204, 204);
				font-weight: 700;
				font-style: italic;
			}

			a {
				cursor: pointer;
			}

			sup.md-footnote {
				padding: 2px 4px;
				background-color: rgba(238, 238, 238, 0.701961);
				color: rgb(85, 85, 85);
				border-top-left-radius: 4px;
				border-top-right-radius: 4px;
				border-bottom-right-radius: 4px;
				border-bottom-left-radius: 4px;
				cursor: pointer;
			}

			sup.md-footnote a,
			sup.md-footnote a:hover {
				color: inherit;
				text-transform: inherit;
				text-decoration: inherit;
			}

			#write input[type="checkbox"] {
				cursor: pointer;
				width: inherit;
				height: inherit;
			}

			figure {
				overflow-x: auto;
				margin: 1.2em 0px;
				max-width: calc(100% + 16px);
				padding: 0px;
			}

			figure>table {
				margin: 0px;
			}

			tr {
				break-inside: avoid;
				break-after: auto;
			}

			thead {
				display: table-header-group;
			}

			table {
				border-collapse: collapse;
				border-spacing: 0px;
				width: 100%;
				overflow: auto;
				break-inside: auto;
				text-align: left;
			}

			table.md-table td {
				min-width: 32px;
			}

			.CodeMirror-gutters {
				border-right-width: 0px;
				background-color: inherit;
			}

			.CodeMirror-linenumber {}

			.CodeMirror {
				text-align: left;
			}

			.CodeMirror-placeholder {
				opacity: 0.3;
			}

			.CodeMirror pre {
				padding: 0px 4px;
			}

			.CodeMirror-lines {
				padding: 0px;
			}

			div.hr:focus {
				cursor: none;
			}

			#write pre {
				white-space: pre-wrap;
			}

			#write.fences-no-line-wrapping pre {
				white-space: pre;
			}

			#write pre.ty-contain-cm {
				white-space: normal;
			}

			.CodeMirror-gutters {
				margin-right: 4px;
			}

			.md-fences {
				font-size: 0.9rem;
				display: block;
				break-inside: avoid;
				text-align: left;
				overflow: visible;
				white-space: pre;
				background-image: inherit;
				background-size: inherit;
				background-attachment: inherit;
				background-origin: inherit;
				background-clip: inherit;
				background-color: inherit;
				position: relative !important;
				background-position: inherit inherit;
				background-repeat: inherit inherit;
			}

			.md-fences-adv-panel {
				width: 100%;
				margin-top: 10px;
				text-align: center;
				padding-top: 0px;
				padding-bottom: 8px;
				overflow-x: auto;
			}

			#write .md-fences.mock-cm {
				white-space: pre-wrap;
			}

			.md-fences.md-fences-with-lineno {
				padding-left: 0px;
			}

			#write.fences-no-line-wrapping .md-fences.mock-cm {
				white-space: pre;
				overflow-x: auto;
			}

			.md-fences.mock-cm.md-fences-with-lineno {
				padding-left: 8px;
			}

			.CodeMirror-line,
			twitterwidget {
				break-inside: avoid;
			}

			.footnotes {
				opacity: 0.8;
				font-size: 0.9rem;
				margin-top: 1em;
				margin-bottom: 1em;
			}

			.footnotes+.footnotes {
				margin-top: 0px;
			}

			.md-reset {
				margin: 0px;
				padding: 0px;
				border: 0px;
				outline: 0px;
				vertical-align: top;
				text-decoration: none;
				text-shadow: none;
				float: none;
				position: static;
				width: auto;
				height: auto;
				white-space: nowrap;
				cursor: inherit;
				line-height: normal;
				font-weight: 400;
				text-align: left;
				box-sizing: content-box;
				direction: ltr;
				background-position: 0px 0px;
				background-repeat: initial initial;
			}

			li div {
				padding-top: 0px;
			}

			blockquote {
				margin: 1rem 0px;
			}

			li .mathjax-block,
			li p {
				margin: 0.5rem 0px;
			}

			li blockquote {
				margin: 1rem 0px;
			}

			li {
				margin: 0px;
				position: relative;
			}

			blockquote> :last-child {
				margin-bottom: 0px;
			}

			blockquote> :first-child,
			li> :first-child {
				margin-top: 0px;
			}

			.footnotes-area {
				color: rgb(136, 136, 136);
				margin-top: 0.714rem;
				padding-bottom: 0.143rem;
				white-space: normal;
			}

			#write .footnote-line {
				white-space: pre-wrap;
			}

			@media print {

				body,
				html {
					border: 1px solid transparent;
					height: 99%;
					break-after: avoid-page;
					break-before: avoid-page;
					font-variant-ligatures: no-common-ligatures;
				}

				#write {
					margin-top: 0px;
					padding-top: 0px;
					border-color: transparent !important;
				}

				.typora-export * {
					-webkit-print-color-adjust: exact;
				}

				.typora-export #write {
					break-after: avoid-page;
				}

				.typora-export #write::after {
					height: 0px;
				}

				.is-mac table {
					break-inside: avoid;
				}

				.typora-export-show-outline .typora-export-sidebar {
					display: none;
				}
			}

			.footnote-line {
				margin-top: 0.714em;
				font-size: 0.7em;
			}

			a img,
			img a {
				cursor: pointer;
			}

			pre.md-meta-block {
				font-size: 0.8rem;
				min-height: 0.8rem;
				white-space: pre-wrap;
				background-color: rgb(204, 204, 204);
				display: block;
				overflow-x: hidden;
				background-position: initial initial;
				background-repeat: initial initial;
			}

			p>.md-image:only-child:not(.md-img-error) img,
			p>img:only-child {
				display: block;
				margin: auto;
			}

			#write.first-line-indent p>.md-image:only-child:not(.md-img-error) img {
				left: -2em;
				position: relative;
			}

			p>.md-image:only-child {
				display: inline-block;
				width: 100%;
			}

			#write .MathJax_Display {
				margin: 0.8em 0px 0px;
			}

			.md-math-block {
				width: 100%;
			}

			.md-math-block:not(:empty)::after {
				display: none;
			}

			.MathJax_ref {
				fill: currentcolor;
			}

			[contenteditable="true"]:active,
			[contenteditable="true"]:focus,
			[contenteditable="false"]:active,
			[contenteditable="false"]:focus {
				outline: 0px;
				box-shadow: none;
			}

			.md-task-list-item {
				position: relative;
				list-style-type: none;
			}

			.task-list-item.md-task-list-item {
				padding-left: 0px;
			}

			.md-task-list-item>input {
				position: absolute;
				top: 0px;
				left: 0px;
				margin-left: -1.2em;
				margin-top: calc(1em - 10px);
				border: none;
			}

			.math {
				font-size: 1rem;
			}

			.md-toc {
				min-height: 3.58rem;
				position: relative;
				font-size: 0.9rem;
				border-top-left-radius: 10px;
				border-top-right-radius: 10px;
				border-bottom-right-radius: 10px;
				border-bottom-left-radius: 10px;
			}

			.md-toc-content {
				position: relative;
				margin-left: 0px;
			}

			.md-toc-content::after,
			.md-toc::after {
				display: none;
			}

			.md-toc-item {
				display: block;
				color: rgb(65, 131, 196);
			}

			.md-toc-item a {
				text-decoration: none;
			}

			.md-toc-inner:hover {
				text-decoration: underline;
			}

			.md-toc-inner {
				display: inline-block;
				cursor: pointer;
			}

			.md-toc-h1 .md-toc-inner {
				margin-left: 0px;
				font-weight: 700;
			}

			.md-toc-h2 .md-toc-inner {
				margin-left: 2em;
			}

			.md-toc-h3 .md-toc-inner {
				margin-left: 4em;
			}

			.md-toc-h4 .md-toc-inner {
				margin-left: 6em;
			}

			.md-toc-h5 .md-toc-inner {
				margin-left: 8em;
			}

			.md-toc-h6 .md-toc-inner {
				margin-left: 10em;
			}

			@media screen and (max-width: 48em) {
				.md-toc-h3 .md-toc-inner {
					margin-left: 3.5em;
				}

				.md-toc-h4 .md-toc-inner {
					margin-left: 5em;
				}

				.md-toc-h5 .md-toc-inner {
					margin-left: 6.5em;
				}

				.md-toc-h6 .md-toc-inner {
					margin-left: 8em;
				}
			}

			a.md-toc-inner {
				font-size: inherit;
				font-style: inherit;
				font-weight: inherit;
				line-height: inherit;
			}

			.footnote-line a:not(.reversefootnote) {
				color: inherit;
			}

			.md-attr {
				display: none;
			}

			.md-fn-count::after {
				content: ".";
			}

			code,
			pre,
			samp,
			tt {
				font-family: var(--monospace);
			}

			kbd {
				margin: 0px 0.1em;
				padding: 0.1em 0.6em;
				font-size: 0.8em;
				color: rgb(36, 39, 41);
				background-color: rgb(255, 255, 255);
				border: 1px solid rgb(173, 179, 185);
				border-top-left-radius: 3px;
				border-top-right-radius: 3px;
				border-bottom-right-radius: 3px;
				border-bottom-left-radius: 3px;
				box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset;
				white-space: nowrap;
				vertical-align: middle;
				background-position: initial initial;
				background-repeat: initial initial;
			}

			.md-comment {
				color: rgb(162, 127, 3);
				opacity: 0.8;
				font-family: var(--monospace);
			}

			code {
				text-align: left;
			}

			a.md-print-anchor {
				white-space: pre !important;
				border: none !important;
				display: inline-block !important;
				position: absolute !important;
				width: 1px !important;
				right: 0px !important;
				outline: 0px !important;
				text-shadow: initial !important;
				background-position: 0px 0px !important;
				background-repeat: initial initial !important;
			}

			.os-windows.monocolor-emoji .md-emoji {
				font-family: "Segoe UI Symbol", sans-serif;
			}

			.md-diagram-panel>svg {
				max-width: 100%;
			}

			[lang="flow"] svg,
			[lang="mermaid"] svg {
				max-width: 100%;
				height: auto;
			}

			[lang="mermaid"] .node text {
				font-size: 1rem;
			}

			table tr th {
				border-bottom-width: 0px;
			}

			video {
				max-width: 100%;
				display: block;
				margin: 0px auto;
			}

			iframe {
				max-width: 100%;
				width: 100%;
				border: none;
			}

			.highlight td,
			.highlight tr {
				border: 0px;
			}

			mark {
				background-color: rgb(255, 255, 0);
				color: rgb(0, 0, 0);
				background-position: initial initial;
				background-repeat: initial initial;
			}

			.md-html-inline .md-plain,
			.md-html-inline strong,
			mark .md-inline-math,
			mark strong {
				color: inherit;
			}

			.md-expand mark .md-meta {
				opacity: 0.3 !important;
			}

			mark .md-meta {
				color: rgb(0, 0, 0);
			}

			@media print {

				.typora-export h1,
				.typora-export h2,
				.typora-export h3,
				.typora-export h4,
				.typora-export h5,
				.typora-export h6 {
					break-inside: avoid;
				}
			}

			.md-diagram-panel .messageText {
				stroke: none !important;
			}

			.md-diagram-panel .start-state {
				fill: var(--node-fill);
			}

			.md-diagram-panel .edgeLabel rect {
				opacity: 1 !important;
			}

			.md-require-zoom-fix {
				height: auto;
				margin-top: 16px;
				margin-bottom: 16px;
			}

			.md-require-zoom-fix foreignObject {
				font-size: var(--mermaid-font-zoom);
			}

			.md-fences.md-fences-math {
				font-size: 1em;
			}

			.md-fences-advanced:not(.md-focus) {
				padding: 0px;
				white-space: nowrap;
				border: 0px;
			}

			.md-fences-advanced:not(.md-focus) {
				background-image: inherit;
				background-size: inherit;
				background-attachment: inherit;
				background-origin: inherit;
				background-clip: inherit;
				background-color: inherit;
				background-position: inherit inherit;
				background-repeat: inherit inherit;
			}

			.typora-export-show-outline .typora-export-content {
				max-width: 1440px;
				margin: auto;
				display: flex;
				flex-direction: row;
			}

			.typora-export-sidebar {
				width: 300px;
				font-size: 0.8rem;
				margin-top: 80px;
				margin-right: 18px;
			}

			.typora-export-show-outline #write {
				--webkit-flex: 2;
				flex: 2 1 0%;
			}

			.typora-export-sidebar .outline-content {
				position: fixed;
				top: 0px;
				max-height: 100%;
				overflow-y: auto;
				padding-bottom: 30px;
				padding-top: 60px;
				width: 300px;
				overflow-x: hidden;
			}

			@media screen and (max-width: 1024px) {

				.typora-export-sidebar,
				.typora-export-sidebar .outline-content {
					width: 240px;
				}
			}

			@media screen and (max-width: 800px) {
				.typora-export-sidebar {
					display: none;
				}
			}

			.outline-content li,
			.outline-content ul {
				margin-left: 0px;
				margin-right: 0px;
				padding-left: 0px;
				padding-right: 0px;
				list-style: none;
			}

			.outline-content ul {
				margin-top: 0px;
				margin-bottom: 0px;
			}

			.outline-content strong {
				font-weight: 400;
			}

			.outline-expander {
				width: 1rem;
				height: 1.428571429rem;
				position: relative;
				display: table-cell;
				vertical-align: middle;
				cursor: pointer;
				padding-left: 4px;
			}

			.outline-expander::before {
				content: '';
				position: relative;
				font-family: Ionicons;
				display: inline-block;
				font-size: 8px;
				vertical-align: middle;
			}

			.outline-item {
				padding-top: 3px;
				padding-bottom: 3px;
				cursor: pointer;
			}

			.outline-expander:hover::before {
				content: '';
			}

			.outline-h1>.outline-item {
				padding-left: 0px;
			}

			.outline-h2>.outline-item {
				padding-left: 1em;
			}

			.outline-h3>.outline-item {
				padding-left: 2em;
			}

			.outline-h4>.outline-item {
				padding-left: 3em;
			}

			.outline-h5>.outline-item {
				padding-left: 4em;
			}

			.outline-h6>.outline-item {
				padding-left: 5em;
			}

			.outline-label {
				cursor: pointer;
				display: table-cell;
				vertical-align: middle;
				text-decoration: none;
				color: inherit;
			}

			.outline-label:hover {
				text-decoration: underline;
			}

			.outline-item:hover {
				border-color: rgb(245, 245, 245);
				background-color: var(--item-hover-bg-color);
			}

			.outline-item:hover {
				margin-left: -28px;
				margin-right: -28px;
				border-left-width: 28px;
				border-left-style: solid;
				border-left-color: transparent;
				border-right-width: 28px;
				border-right-style: solid;
				border-right-color: transparent;
			}

			.outline-item-single .outline-expander::before,
			.outline-item-single .outline-expander:hover::before {
				display: none;
			}

			.outline-item-open>.outline-item>.outline-expander::before {
				content: '';
			}

			.outline-children {
				display: none;
			}

			.info-panel-tab-wrapper {
				display: none;
			}

			.outline-item-open>.outline-children {
				display: block;
			}

			.typora-export .outline-item {
				padding-top: 1px;
				padding-bottom: 1px;
			}

			.typora-export .outline-item:hover {
				margin-right: -8px;
				border-right-width: 8px;
				border-right-style: solid;
				border-right-color: transparent;
			}

			.typora-export .outline-expander::before {
				content: "+";
				font-family: inherit;
				top: -1px;
			}

			.typora-export .outline-expander:hover::before,
			.typora-export .outline-item-open>.outline-item>.outline-expander::before {
				content: '−';
			}

			.typora-export-collapse-outline .outline-children {
				display: none;
			}

			.typora-export-collapse-outline .outline-item-open>.outline-children,
			.typora-export-no-collapse-outline .outline-children {
				display: block;
			}

			.typora-export-no-collapse-outline .outline-expander::before {
				content: "" !important;
			}

			.typora-export-show-outline .outline-item-active>.outline-item .outline-label {
				font-weight: 700;
			}

			.md-inline-math-container mjx-container {
				zoom: 0.95;
			}


			:root {
				--side-bar-bg-color: #fafafa;
				--control-text-color: #777;
			}

			@include-when-export url(https://fonts.loli.net/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext);

			/* open-sans-regular - latin-ext_latin */
			/* open-sans-italic - latin-ext_latin */
			/* open-sans-700 - latin-ext_latin */
			/* open-sans-700italic - latin-ext_latin */
			html {
				font-size: 16px;
				-webkit-font-smoothing: antialiased;
			}

			body {
				font-family: "Open Sans", "Clear Sans", "Helvetica Neue", Helvetica, Arial, 'Segoe UI Emoji', sans-serif;
				color: rgb(51, 51, 51);
				line-height: 1.6;
			}

			#write {
				max-width: 860px;
				margin: 0 auto;
				padding: 30px;
				padding-bottom: 100px;
			}

			@media only screen and (min-width: 1400px) {
				#write {
					max-width: 1024px;
				}
			}

			@media only screen and (min-width: 1800px) {
				#write {
					max-width: 1200px;
				}
			}

			#write>ul:first-child,
			#write>ol:first-child {
				margin-top: 30px;
			}

			a {
				color: #4183C4;
			}

			h1,
			h2,
			h3,
			h4,
			h5,
			h6 {
				position: relative;
				margin-top: 1rem;
				margin-bottom: 1rem;
				font-weight: bold;
				line-height: 1.4;
				cursor: text;
			}

			h1:hover a.anchor,
			h2:hover a.anchor,
			h3:hover a.anchor,
			h4:hover a.anchor,
			h5:hover a.anchor,
			h6:hover a.anchor {
				text-decoration: none;
			}

			h1 tt,
			h1 code {
				font-size: inherit;
			}

			h2 tt,
			h2 code {
				font-size: inherit;
			}

			h3 tt,
			h3 code {
				font-size: inherit;
			}

			h4 tt,
			h4 code {
				font-size: inherit;
			}

			h5 tt,
			h5 code {
				font-size: inherit;
			}

			h6 tt,
			h6 code {
				font-size: inherit;
			}

			h1 {
				font-size: 2.25em;
				line-height: 1.2;
				border-bottom: 1px solid #eee;
			}

			h2 {
				font-size: 1.75em;
				line-height: 1.225;
				border-bottom: 1px solid #eee;
			}

			/*@media print {
    .typora-export h1,
    .typora-export h2 {
        border-bottom: none;
        padding-bottom: initial;
    }

    .typora-export h1::after,
    .typora-export h2::after {
        content: "";
        display: block;
        height: 100px;
        margin-top: -96px;
        border-top: 1px solid #eee;
    }
}*/

			h3 {
				font-size: 1.5em;
				line-height: 1.43;
			}

			h4 {
				font-size: 1.25em;
			}

			h5 {
				font-size: 1em;
			}

			h6 {
				font-size: 1em;
				color: #777;
			}

			p,
			blockquote,
			ul,
			ol,
			dl,
			table {
				margin: 0.8em 0;
			}

			li>ol,
			li>ul {
				margin: 0 0;
			}

			hr {
				height: 2px;
				padding: 0;
				margin: 16px 0;
				background-color: #e7e7e7;
				border: 0 none;
				overflow: hidden;
				box-sizing: content-box;
			}

			li p.first {
				display: inline-block;
			}

			ul,
			ol {
				padding-left: 30px;
			}

			ul:first-child,
			ol:first-child {
				margin-top: 0;
			}

			ul:last-child,
			ol:last-child {
				margin-bottom: 0;
			}

			blockquote {
				border-left: 4px solid #dfe2e5;
				padding: 0 15px;
				color: #777777;
			}

			blockquote blockquote {
				padding-right: 0;
			}

			table {
				padding: 0;
				word-break: initial;
			}

			table tr {
				border: 1px solid #dfe2e5;
				margin: 0;
				padding: 0;
			}

			table tr:nth-child(2n),
			thead {
				background-color: #f8f8f8;
			}

			table th {
				font-weight: bold;
				border: 1px solid #dfe2e5;
				border-bottom: 0;
				margin: 0;
				padding: 6px 13px;
			}

			table td {
				border: 1px solid #dfe2e5;
				margin: 0;
				padding: 6px 13px;
			}

			table th:first-child,
			table td:first-child {
				margin-top: 0;
			}

			table th:last-child,
			table td:last-child {
				margin-bottom: 0;
			}

			.CodeMirror-lines {
				padding-left: 4px;
			}

			.code-tooltip {
				box-shadow: 0 1px 1px 0 rgba(0, 28, 36, .3);
				border-top: 1px solid #eef2f2;
			}

			.md-fences,
			code,
			tt {
				border: 1px solid #e7eaed;
				background-color: #f8f8f8;
				border-radius: 3px;
				padding: 0;
				padding: 2px 4px 0px 4px;
				font-size: 0.9em;
			}

			code {
				background-color: #f3f4f4;
				padding: 0 2px 0 2px;
			}

			.md-fences {
				margin-bottom: 15px;
				margin-top: 15px;
				padding-top: 8px;
				padding-bottom: 6px;
			}


			.md-task-list-item>input {
				margin-left: -1.3em;
			}

			@media print {
				html {
					font-size: 13px;
				}

				table,
				pre {
					page-break-inside: avoid;
				}

				pre {
					word-wrap: break-word;
				}
			}

			.md-fences {
				background-color: #f8f8f8;
			}

			#write pre.md-meta-block {
				padding: 1rem;
				font-size: 85%;
				line-height: 1.45;
				background-color: #f7f7f7;
				border: 0;
				border-radius: 3px;
				color: #777777;
				margin-top: 0 !important;
			}

			.mathjax-block>.code-tooltip {
				bottom: .375rem;
			}

			.md-mathjax-midline {
				background: #fafafa;
			}

			#write>h3.md-focus:before {
				left: -1.5625rem;
				top: .375rem;
			}

			#write>h4.md-focus:before {
				left: -1.5625rem;
				top: .285714286rem;
			}

			#write>h5.md-focus:before {
				left: -1.5625rem;
				top: .285714286rem;
			}

			#write>h6.md-focus:before {
				left: -1.5625rem;
				top: .285714286rem;
			}

			.md-image>.md-meta {
				/*border: 1px solid #ddd;*/
				border-radius: 3px;
				padding: 2px 0px 0px 4px;
				font-size: 0.9em;
				color: inherit;
			}

			.md-tag {
				color: #a7a7a7;
				opacity: 1;
			}

			.md-toc {
				margin-top: 20px;
				padding-bottom: 20px;
			}

			.sidebar-tabs {
				border-bottom: none;
			}

			#typora-quick-open {
				border: 1px solid #ddd;
				background-color: #f8f8f8;
			}

			#typora-quick-open-item {
				background-color: #FAFAFA;
				border-color: #FEFEFE #e5e5e5 #e5e5e5 #eee;
				border-style: solid;
				border-width: 1px;
			}

			/** focus mode */
			.on-focus-mode blockquote {
				border-left-color: rgba(85, 85, 85, 0.12);
			}

			header,
			.context-menu,
			.megamenu-content,
			footer {
				font-family: "Segoe UI", "Arial", sans-serif;
			}

			.file-node-content:hover .file-node-icon,
			.file-node-content:hover .file-node-open-state {
				visibility: visible;
			}

			.mac-seamless-mode #typora-sidebar {
				background-color: #fafafa;
				background-color: var(--side-bar-bg-color);
			}

			.md-lang {
				color: #b4654d;
			}

			/*.html-for-mac {
    --item-hover-bg-color: #E6F0FE;
}*/

			#md-notification .btn {
				border: 0;
			}

			.dropdown-menu .divider {
				border-color: #e5e5e5;
				opacity: 0.4;
			}

			.ty-preferences .window-content {
				background-color: #fafafa;
			}

			.ty-preferences .nav-group-item.active {
				color: white;
				background: #999;
			}

			.menu-item-container a.menu-style-btn {
				background-color: #f5f8fa;
				background-image: linear-gradient(180deg, hsla(0, 0%, 100%, 0.8), hsla(0, 0%, 100%, 0));
			}



			mjx-container[jax="SVG"] {
				direction: ltr;
			}

			mjx-container[jax="SVG"]>svg {
				overflow: visible;
				min-height: 1px;
				min-width: 1px;
			}

			mjx-container[jax="SVG"]>svg a {
				fill: blue;
				stroke: blue;
			}

			mjx-assistive-mml {
				position: absolute !important;
				top: 0px;
				left: 0px;
				clip: rect(1px, 1px, 1px, 1px);
				padding: 1px 0px 0px 0px !important;
				border: 0px !important;
				display: block !important;
				width: auto !important;
				overflow: hidden !important;
				-webkit-touch-callout: none;
				-webkit-user-select: none;
				-khtml-user-select: none;
				-moz-user-select: none;
				-ms-user-select: none;
				user-select: none;
			}

			mjx-assistive-mml[display="block"] {
				width: 100% !important;
			}

			mjx-container[jax="SVG"][display="true"] {
				display: block;
				text-align: center;
				margin: 1em 0;
			}

			mjx-container[jax="SVG"][display="true"][width="full"] {
				display: flex;
			}

			mjx-container[jax="SVG"][justify="left"] {
				text-align: left;
			}

			mjx-container[jax="SVG"][justify="right"] {
				text-align: right;
			}

			g[data-mml-node="merror"]>g {
				fill: red;
				stroke: red;
			}

			g[data-mml-node="merror"]>rect[data-background] {
				fill: yellow;
				stroke: none;
			}

			g[data-mml-node="mtable"]>line[data-line],
			svg[data-table]>g>line[data-line] {
				stroke-width: 70px;
				fill: none;
			}

			g[data-mml-node="mtable"]>rect[data-frame],
			svg[data-table]>g>rect[data-frame] {
				stroke-width: 70px;
				fill: none;
			}

			g[data-mml-node="mtable"]>.mjx-dashed,
			svg[data-table]>g>.mjx-dashed {
				stroke-dasharray: 140;
			}

			g[data-mml-node="mtable"]>.mjx-dotted,
			svg[data-table]>g>.mjx-dotted {
				stroke-linecap: round;
				stroke-dasharray: 0, 140;
			}

			g[data-mml-node="mtable"]>g>svg {
				overflow: visible;
			}

			[jax="SVG"] mjx-tool {
				display: inline-block;
				position: relative;
				width: 0;
				height: 0;
			}

			[jax="SVG"] mjx-tool>mjx-tip {
				position: absolute;
				top: 0;
				left: 0;
			}

			mjx-tool>mjx-tip {
				display: inline-block;
				padding: .2em;
				border: 1px solid #888;
				font-size: 70%;
				background-color: #F8F8F8;
				color: black;
				box-shadow: 2px 2px 5px #AAAAAA;
			}

			g[data-mml-node="maction"][data-toggle] {
				cursor: pointer;
			}

			mjx-status {
				display: block;
				position: fixed;
				left: 1em;
				bottom: 1em;
				min-width: 25%;
				padding: .2em .4em;
				border: 1px solid #888;
				font-size: 90%;
				background-color: #F8F8F8;
				color: black;
			}

			foreignObject[data-mjx-xml] {
				font-family: initial;
				line-height: normal;
				overflow: visible;
			}

			mjx-container[jax="SVG"] path[data-c],
			mjx-container[jax="SVG"] use[data-c] {
				stroke-width: 3;
			}

			g[data-mml-node="xypic"] path {
				stroke-width: inherit;
			}

			.MathJax g[data-mml-node="xypic"] path {
				stroke-width: inherit;
			}

			:root {
				--mermaid-font-zoom: 1em;
			}

			@media print {
				@page {
					margin: 0 0 0 0;
				}

				body.typora-export {
					padding-left: 0;
					padding-right: 0;
				}

				#write {
					padding: 0;
				}
			}
		</style>
		<title>5books接口文档</title>
	</head>
	<body class='typora-export'>
		<div class='typora-export-content'>
			<div id='write' class=''>
				<h1 id='0-公用对象'><span>0 公用对象</span></h1>
				<h2 id='00-响应的sysresult对象'><span>0.0 响应的SysResult对象：</span></h2>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>status</span></td>
								<td><span>状态信息</span></td>
								<td><span>200表示服务器请求成功， 201表示服务器异常</span></td>
							</tr>
							<tr>
								<td><span>msg</span></td>
								<td><span>服务器返回时携带的提示消息</span></td>
								<td><span>可为null</span></td>
							</tr>
							<tr>
								<td><span>data</span></td>
								<td><span>服务器返回的业务数据</span></td>
								<td><span>返回值为PageResult对象</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h2 id='01-book对象'><span>0.1 Book对象</span></h2>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>参数类型</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>name</span></td>
								<td><span>String</span></td>
								<td><span>书籍名</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>zan</span></td>
								<td><span>Integer</span></td>
								<td><span>点赞数</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>price</span></td>
								<td><span>Double</span></td>
								<td><span>图书价格</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>…</span></td>
								<td><span>…</span></td>
								<td><span>…</span></td>
								<td><span>…</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h1 id='1-前端展示'><span>1 前端展示</span></h1>
				<h2 id='11-页面展示模块'><span>1.1 页面展示模块</span></h2>
				<h3 id='111-网站首页'><span>1.1.1 网站首页</span></h3>
				<h4 id='a-全站搜索'><span>A. 全站搜索</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>用户输入“书名关键字”后，在当前页面进行局部刷新，将符合的书籍按列表显示在页面上。</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/book/searchall</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以封装的queryInfo对象为参数； 后端用PageResult对象接收,并返回含有Book对象数组的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/home/searchall?query=' target='_blank'
										class='url'>http://localhost:8091/home/searchall?query=</a><span>查询关键字</span><span>&amp;</span><span>pageNum=1
									</span><span>&amp;</span><span>pageSize=15</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>图书表（book）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<p><span>queryInfo对象：</span></p>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>query</span></td>
								<td><span>用户输入的书籍关键字</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>pageNum</span></td>
								<td><span>分页查询的页数</span></td>
								<td><span>不可为null，默认为1</span></td>
							</tr>
							<tr>
								<td><span>pageSize</span></td>
								<td><span>分页查询的条,数</span></td>
								<td><span>不可为null，默认为15</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<p><span>PageResult 对象</span></p>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>参数类型</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>query</span></td>
								<td><span>String</span></td>
								<td><span>用户的书籍关键字</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>pageNum</span></td>
								<td><span>Integer</span></td>
								<td><span>查询页数</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>pageSize</span></td>
								<td><span>Integer</span></td>
								<td><span>查询条数</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>total</span></td>
								<td><span>Long</span></td>
								<td><span>结果总条数</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>rows</span></td>
								<td><span>Object</span></td>
								<td><span>分页查询的结果</span></td>
								<td><span>不可为null</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='b-按类展览书籍'><span>B. 按类展览书籍</span></h4>
				<blockquote>
					<p><span>暂分计算机、科普、文学、教程四个一级分类，在各一级分类下再分若干二级分类。目前暂定3个级别的分类。</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>首页加载时自动加载书籍的三级标题</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/book/getmenulist</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端：无；后端返回包含有List</span><span>&lt;</span><span>BookCat</span><span>&gt;</span><span>类型对象的SysResult对象</span>
								</td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/book/getmenulist' target='_blank'
										class='url'>http://localhost:8091/book/getmenulist</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>图书类别表（book_cat）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>BookCat对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>类型</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>id</span></td>
								<td><span>Integer</span></td>
								<td><span>书籍各级标题的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>name</span></td>
								<td><span>String</span></td>
								<td><span>书籍各级标题的名字</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>parentId</span></td>
								<td><span>Integer</span></td>
								<td><span>标题的父标题id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>level</span></td>
								<td><span>Integer</span></td>
								<td><span>标题所在的级别</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>children</span></td>
								<td><span>List</span><span>&lt;</span><span>BookCat</span><span>&gt;</span></td>
								<td><span>标题的子标题</span></td>
								<td><span>可为null</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='c-网站信息'><span>C. 网站信息</span></h4>
				<h5 id='关于本站'><span>关于本站；</span></h5>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>超链接. 关于本站的一些信息，如建站信息、管理员信息等</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/home/about</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>无。后端返回一个包含本站消息字符串的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/home/about' target='_blank'
										class='url'>http://localhost:8091/home/about</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>网站信息表（about）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h5 id='联系管理员'><span>联系管理员；</span></h5>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>超链接. 关于管理员的联系方式</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/home/contactus</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>无。后端返回一个字符串联系方式（邮箱）的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/home/contactus' target='_blank'
										class='url'>http://localhost:8091/home/contactus</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户表（user）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h5 id='捐助链接'><span>捐助链接</span></h5>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>超链接. 点击后跳转捐助页面</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/home/donate</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>无。后端返回包含字符串链接的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/home/donate' target='_blank'
										class='url'>http://localhost:8091/home/donate</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>网站信息表（about）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h3 id='112-书籍详情页'><span>1.1.2 书籍详情页</span></h3>
				<h4 id='a-书籍简介'><span>A. 书籍简介</span></h4>
				<blockquote>
					<p><span>左图右字，关于该书的基本信息</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>用户点击书籍后, 跳转此页</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/book/view</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以userId、bookId为参数。后端返回一个包含Book对象的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/book/view?userid=xx&amp;bookId=xx' target='_blank'
										class='url'>http://localhost:8091/book/view?userid=xx&bookId=xx</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>图书表（book）、操作记录表(user_opra)</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='b-下载购买）'><span>B. 下载（购买）</span></h4>
				<blockquote>
					<p><span>免费书籍显示下载按钮，付费书籍显示购买按钮</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>用户点击下载/购买按钮后，跳转下载地址/支付地址</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/book/download</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以userId、bookId为参数。后端返回一个包含下载链接/支付链接的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/book/download?userid=xx&amp;bookId=xx'
										target='_blank'
										class='url'>http://localhost:8091/book/download?userid=xx&bookId=xx</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>图书表（book）、操作记录表(user_opra)</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<p><span>注意：下载数目限制——每一用户一天下载限额20本。</span></p>
				<h4 id='c-收藏加入购物车）'><span>C. 收藏（加入购物车）</span></h4>
				<blockquote>
					<p><span>类似于加入购物车的功能，之后可以在收藏夹内进行批量操作</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>点击后，前端图标变为已收藏，后端将数据加入“用户收藏表”</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/book/collections/</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>put</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以userId、bookId为参数； 后端返回SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/book/collections?userid=xx&amp;bookId=xx'
										target='_blank'
										class='url'>http://localhost:8091/book/collections?userid=xx&bookId=xx</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户收藏表（user_coll）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='d-点赞'><span>D. 点赞</span></h4>
				<blockquote>
					<p><span>为后面准备推出的按点赞数排序、本站热榜的功能做铺垫</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>点击后，前端显示点赞效果，后端将“图书表”的点赞值+1</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/book/zan</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>put</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以封装的zanInfo对象为参数； 后端用zan对象接收,并返回SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/book' target='_blank'
										class='url'>http://localhost:8091/book</a><span> /zan</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>图书表（book）、操作记录表(user_opra)</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>zanInfo对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>userId</span></td>
								<td><span>绑定点赞的用户对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>bookId</span></td>
								<td><span>绑定点赞的图书对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>status</span></td>
								<td><span>绑定点赞的状态（单击为1、双击为0）</span></td>
								<td><span>不可为null</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>Zan对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>类型</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>userId</span></td>
								<td><span>Integer</span></td>
								<td><span>点赞的用户对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>bookId</span></td>
								<td><span>Integer</span></td>
								<td><span>点赞的图书对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>status</span></td>
								<td><span>Boolean</span></td>
								<td><span>点赞的状态（单击点赞、双击取消）</span></td>
								<td><span>不可为null</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='e-评论'><span>E. 评论</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>在书籍下方的评论区域</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/book/comment</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>put</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以封装的commentInfo对象为参数； 后端用Comment对象接收,并返回SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/book/comment' target='_blank'
										class='url'>http://localhost:8091/book/comment</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户评论表（user_comm）、操作记录表(user_opra)</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>commentInfo对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>userId</span></td>
								<td><span>绑定评论的用户对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>bookId</span></td>
								<td><span>绑定评论的图书对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>comm</span></td>
								<td><span>评论的内容</span></td>
								<td><span>不可为null</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>Comment对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>类型</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>userId</span></td>
								<td><span>Integer</span></td>
								<td><span>绑定评论的用户对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>bookId</span></td>
								<td><span>Integer</span></td>
								<td><span>绑定评论的图书对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>comm</span></td>
								<td><span>String</span></td>
								<td><span>评论的内容</span></td>
								<td><span>不可为null</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='f-举报'><span>F. 举报</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>书籍下方的举报按钮，单击举报，双击取消</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/book/report</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>put</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以userId、bookId为参数； 后端用Report对象接收,并返回SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/book/' target='_blank'
										class='url'>http://localhost:8091/book/</a><span>
										report?userid=xx&amp;bookId=xx</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>Comment对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>类型</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>userId</span></td>
								<td><span>Integer</span></td>
								<td><span>举报的用户对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>bookId</span></td>
								<td><span>Integer</span></td>
								<td><span>举报的图书对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='g-书籍预览'><span>G. 书籍预览</span></h4>
				<blockquote>
					<p><span>提供该书籍的前几页的预览，展示书籍情况，尤其是付费书籍的清晰度、版次信息等</span></p>
				</blockquote>
				<h2 id='12-用户模块'><span>1.2 用户模块</span></h2>
				<h3 id='121-注册登陆页'><span>1.2.1 注册、登陆页</span></h3>
				<h4 id='a-游客登录'><span>A. 游客登录</span></h4>
				<blockquote>
					<p><span>默认没有登录的用户提供游客账号，不能够发布、下载书籍，但是可以进行网站的正常浏览</span></p>
				</blockquote>
				<h4 id='b-注册'><span>B. 注册</span></h4>
				<blockquote>
					<p><span>在当前窗口打开一个新页面用手机号进行注册，同时需设定用户名、密码信息。</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>用户用手机号注册，同时设定用户名和密码</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/addUser</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>post</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以封装的signUpForm对象为参数； 后端返回SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/' target='_blank'
										class='url'>http://localhost:8091/user/</a><span> addUser</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户表（user）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>signUpForm对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>phone</span></td>
								<td><span>用户手机号</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>username</span></td>
								<td><span>用户名</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>password</span></td>
								<td><span>用户密码</span></td>
								<td><span>不可为null</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='c-登陆'><span>C. 登陆</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>用户用手机号登录</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/login</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>post</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以封装的loginForm对象为参数； 后端返回带有token密钥的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/login' target='_blank'
										class='url'>http://localhost:8091/user/login</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户表（user）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>loginForm对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>phone</span></td>
								<td><span>用户手机号</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>password</span></td>
								<td><span>用户密码</span></td>
								<td><span>不可为null</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='d-找回密码'><span>D. 找回密码</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>手机验证码重置密码</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/repass</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>post</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以封装的loginForm对象为参数； 后端返回带有token密钥的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/login' target='_blank'
										class='url'>http://localhost:8091/user/login</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户表（user）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h3 id='122-用户个人中心'><span>1.2.2 用户个人中心</span></h3>
				<h4 id='a-消息通知'><span>A. 消息通知</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>用户收到的消息</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/message</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以用户id为参数； 后端返回包含有string类型消息的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/message' target='_blank'
										class='url'>http://localhost:8091/user/message</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>管理员-用户表（admin</span><span>_</span><span>user）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='b-发送消息暂时不做）'><span>B. 发送消息（暂时不做）</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>用户输入消息后，后端入库</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/message</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>post</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以封装的msgtInfo对象为参数；后端返回无参的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/message' target='_blank'
										class='url'>http://localhost:8091/user/message</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>管理员-用户表（admin</span><span>_</span><span>user）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>msgtInfo对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>from</span></td>
								<td><span>发送消息的人对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>to</span></td>
								<td><span>接收消息的人对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>message</span></td>
								<td><span>消息的内容</span></td>
								<td><span>不可为null</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='c-账号信息显示'><span>C. 账号信息显示</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>进入此页后，显示用户的个人信息</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/profile</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以userid为参数；后端返回含有User对象的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/' target='_blank'
										class='url'>http://localhost:8091/user/</a><span> profile?userid=xx</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户表（user）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>User对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>类型</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>id</span></td>
								<td><span>Integer</span></td>
								<td><span>相应用户对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>name</span></td>
								<td><span>String</span></td>
								<td><span>用户名</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>password</span></td>
								<td><span>String</span></td>
								<td><span>用户的密码</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>headAddr</span></td>
								<td><span>String</span></td>
								<td><span>用户头像的所在地址</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>phone</span></td>
								<td><span>String</span></td>
								<td><span>用户的手机号</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>…</span></td>
								<td>&nbsp;</td>
								<td>&nbsp;</td>
								<td>&nbsp;</td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='d账号信息修改'><span>D.账号信息修改</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>头像设置</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/ updateHead</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>put</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以userid、headaddr为参数；后端返回无参SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/' target='_blank'
										class='url'>http://localhost:8091/user/</a><span> updateUser</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户表（user）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>用户名设置</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/ updateName</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>put</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以userid、username为参数；后端返回无参SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/' target='_blank'
										class='url'>http://localhost:8091/user/</a><span> updateName</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户表（user）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<p><span>手机号修改：</span></p>
				<p><span>流程：1. 解绑原手机号，验证通过后点击下一步进入新手机号的设置界面</span></p>
				<p><img src="https://images.gitee.com/uploads/images/2021/0715/194959_1c11aefb_9209494.png"
						referrerpolicy="no-referrer" alt="Image description" title="屏幕截图.png"></p>
				<p><span>2.</span>
					<span>绑定新手机号，验证成功则修改完成；验证失败则提示验证失败，可重新进行验证。三次验证失败则提示修改失败。</span>
				</p>
				<p><img src="https://images.gitee.com/uploads/images/2021/0715/195012_1174bf08_9209494.png"
						referrerpolicy="no-referrer" alt="Image description" title="屏幕截图.png"></p>
				<p><span>注意点：事务性修改，绑定新手机失败则回滚。</span></p>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>新手机绑定</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/ updatePhone</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>put</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以userid、phone为参数；后端返回无参SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/' target='_blank'
										class='url'>http://localhost:8091/user/</a><span> updatePhone</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户表（user）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>密码修改：</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>密码修改：先输原密码，验证后再输新密码</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/ updatePwd</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>put</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以userid、password为参数；后端返回无参SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/' target='_blank'
										class='url'>http://localhost:8091/user/</a><span> updatePwd</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户表（user）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='e-收藏夹'><span>E. 收藏夹</span></h4>
				<blockquote>
					<p><span>批量操作：删除、下载</span></p>
				</blockquote>
				<blockquote>
					<p><span>单独操作：删除、下载</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>用户的购物车，查出并显示</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/collections</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以用户id为参数；后端返回含有UserCollection对象的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/' target='_blank'
										class='url'>http://localhost:8091/user/</a><span> profile?userId=xx</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户收藏表（user</span><span>_</span><span>coll）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>用户的购物车，批量操作并修改库再显示</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/collections</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>post</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以userColl对象为参数；后端返回含有UserCollection对象的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/' target='_blank'
										class='url'>http://localhost:8091/user/</a><span> profile</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户收藏表（user</span><span>_</span><span>coll）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>userColl对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>userId</span></td>
								<td><span>批量操作图书的用户对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>bookId</span></td>
								<td><span>操作图书者对应的id</span></td>
								<td><span>数组类型，不可为null</span></td>
							</tr>
							<tr>
								<td><span>time</span></td>
								<td><span>操作时的时间</span></td>
								<td><span>不可为null</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>UserCollection对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>类型</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>userId</span></td>
								<td><span>Integer</span></td>
								<td><span>收藏的用户对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>bookId</span></td>
								<td><span>Integer</span></td>
								<td><span>收藏的图书对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>time</span></td>
								<td><span>Datetime</span></td>
								<td><span>操作的时间</span></td>
								<td><span>不可为null</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='f-用户操作记录'><span>F. 用户操作记录</span></h4>
				<blockquote>
					<p><span>全部、浏览记录、上传记录、下载/购买记录</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>显示用户的操作记录</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/operation</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以userId为参数；后端返回含有UserOper对象的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/' target='_blank'
										class='url'>http://localhost:8091/user/</a><span> operation？userid=xxx</span>
								</td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>操作记录表（user_opra）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>UserOper对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>类型</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>userId</span></td>
								<td><span>Integer</span></td>
								<td><span>操作的用户对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>bookId</span></td>
								<td><span>Integer</span></td>
								<td><span>操作的图书对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>time</span></td>
								<td><span>Datetime</span></td>
								<td><span>操作的时间</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>operation</span></td>
								<td><span>Integer</span></td>
								<td><span>操作的名称</span></td>
								<td><span>不可为null</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='g-上传书籍'><span>G. 上传书籍</span></h4>
				<blockquote>
					<p><span>书籍文件、名称、分类、简介</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>用户上传书籍的接口</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/upload</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>post</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以userId为参数；后端返回SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/' target='_blank'
										class='url'>http://localhost:8091/user/</a><span> upload？userid=xxx</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>图书临时表（book_temp）、书籍图片表（book_pic）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h1 id='2-前端后台管理'><span>2 前端后台管理</span></h1>
				<h2 id='21-用户管理模块'><span>2.1 用户管理模块</span></h2>
				<h3 id='211-审核注册人员暂时不做此功能'><span>2.1.1 审核注册人员(暂时不做此功能)</span></h3>
				<h3 id='212-管理已有用户'><span>2.1.2 管理已有用户</span></h3>
				<h4 id='a-权限设置'><span>A. 权限设置</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>禁止下载：管理员通过开关来禁止用户的下载权限</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/banDown</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>put</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以封装的banDown对象为参数。后端返回一个无参SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/banDown' target='_blank'
										class='url'>http://localhost:8091/user/banDown</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户表（user）、操作记录表(user_opra)</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>banDown对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>adminId</span></td>
								<td><span>处理的管理员id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>userId</span></td>
								<td><span>被封禁的用户id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>downRight</span></td>
								<td><span>下载权限的标识</span></td>
								<td><span>不可为null</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>禁止上传：管理员通过开关来禁止用户的上传权限</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/banUp</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>put</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以封装的banUp对象为参数。后端返回一个无参SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/banUp' target='_blank'
										class='url'>http://localhost:8091/user/banUp</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户表（user）、操作记录表(user_opra)</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>banUp对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>adminId</span></td>
								<td><span>处理的管理员id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>userId</span></td>
								<td><span>被封禁的用户id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>upRight</span></td>
								<td><span>上传权限的标识</span></td>
								<td><span>不可为null</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>账号封禁：管理员通过下拉框（1天/7天/1月/6月/永久）来设置封禁时间</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/banTime</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>put</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以封装的banInfo对象为参数。后端返回一个无参SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/banTime' target='_blank'
										class='url'>http://localhost:8091/user/banTime</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户表（user）、操作记录表(user_opra)</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>banInfo对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>adminId</span></td>
								<td><span>处理的管理员id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>userId</span></td>
								<td><span>被封禁的用户id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>banRight</span></td>
								<td><span>账号封禁标识</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>banTime</span></td>
								<td><span>账号的封禁时间</span></td>
								<td><span>不可为null，默认为1天</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='b-发送信息'><span>B. 发送信息： </span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>管理员通过此接口（文本输入区域）像指定用户发送违规警告、封禁通知、书籍审核结果等消息</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/message</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>put</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以封装的msgtInfo对象为参数；后端返回无参的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/message' target='_blank'
										class='url'>http://localhost:8091/user/message</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>管理员-用户表（admin</span><span>_</span><span>user）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>msgtInfo对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>from</span></td>
								<td><span>发送消息的人对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>to</span></td>
								<td><span>接收消息的人对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>message</span></td>
								<td><span>消息的内容</span></td>
								<td><span>不可为null</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h2 id='22-书籍管理模块'><span>2.2 书籍管理模块</span></h2>
				<h3 id='221-审核用户上传的书籍同意拒绝'><span>2.2.1 审核用户上传的书籍：同意、拒绝</span></h3>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>通过查询图书临时表，审核用户上传的书籍，审核通过则入图书表并删除图书临时表中的条目；审核不通过则删除临时表条目，并给相应用户发送一个审核不通过的消息（内容固定写在后端中）</span>
								</th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/book/addBook</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>put</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以封装的addBook对象为参数。后端返回一个无参SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/book/addBook' target='_blank'
										class='url'>http://localhost:8091/book/addBook</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>图书临时表（book_temp）、图书表（book）、消息表(msg)</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>addBook对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>adminId</span></td>
								<td><span>审核的管理员id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>userId</span></td>
								<td><span>上传者的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>opinion</span></td>
								<td><span>审核结果位</span></td>
								<td><span>0：不通过 1：通过</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h3 id='222-管理已有书籍'><span>2.2.2 管理已有书籍</span></h3>
				<h4 id='a-信息修改名价格简介'><span>A. 信息修改：名、价格、简介</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>通过查询图书表，查看、修改书籍信息</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/book/ updateBook</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>put</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以封装的updateBook对象为参数。后端返回一个无参SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/book/' target='_blank'
										class='url'>http://localhost:8091/book/</a><span> updateBook</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>图书表（book）、操作记录表(user_opra)</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>updateBook对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>adminId</span></td>
								<td><span>操作的管理员id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>book对象</span></td>
								<td><span>封装的修改后book具体信息</span></td>
								<td><span>不可为null，这是一个对象中的对象</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<p><span>Book对象</span></p>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>参数类型</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>name</span></td>
								<td><span>String</span></td>
								<td><span>书籍名</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>price</span></td>
								<td><span>Double</span></td>
								<td><span>图书价格</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>status</span></td>
								<td><span>Integer</span></td>
								<td><span>是否显示的标识位</span></td>
								<td><span>0：隐藏； 1：显示</span></td>
							</tr>
							<tr>
								<td><span>downAddr</span></td>
								<td><span>String</span></td>
								<td><span>下载地址</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>intro</span></td>
								<td><span>String</span></td>
								<td><span>简介</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>faceAdd</span></td>
								<td><span>String</span></td>
								<td><span>封面图片的地址</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>…</span></td>
								<td><span>…</span></td>
								<td><span>…</span></td>
								<td><span>…</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='c-删除'><span>C. 删除</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>通过查询图书表，删除选中的书籍</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/book/deleteBook</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>delete</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端以adminId、bookId为参数。后端返回一个无参SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/book/' target='_blank'
										class='url'>http://localhost:8091/book/</a><span>
										deleteBook?adminid=xx&amp;bookid=xx</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>图书表（book）、操作记录表(user_opra)</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h2 id='23-全站数据统计模块'><span>2.3 全站数据统计模块</span></h2>
				<h3 id='231-书籍相关'><span>2.3.1 书籍相关</span></h3>
				<h4 id='a-全站书籍总数'><span>A. 全站书籍总数</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>统计全站书籍总数的接口</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/book/count</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端参数: 无；后端返回包含有Integer类型书籍总数的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/user/' target='_blank'
										class='url'>http://localhost:8091/user/</a><span> count</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>图书表（book）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='b-每月新增书籍数每月改动数'><span>B. 每月新增书籍数、每月改动数</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>通过查询符合时间区间的书籍总数，完成书籍的每月统计功能</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/book/moncount</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端参数: 无；后端返回包含有Integer类型书籍总数的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/' target='_blank'
										class='url'>http://localhost:8091/</a><span> book / moncount</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>图书描述表（book_desc）、操作记录表(user_opra)</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='c-全站书籍操作记录表'><span>C. 全站书籍操作记录表</span></h4>
				<blockquote>
					<p><span>主要包括“时间、操作、人员”三个信息</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>按时间顺序分页显示全站书籍的更改记录</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/book/allbookope</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端参数: 无；后端返回包含有UserOper对象的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/book/allbookope' target='_blank'
										class='url'>http://localhost:8091/book/allbookope</a></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>操作记录表（user_opra）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<blockquote>
					<p><span>UserOper对象</span></p>
				</blockquote>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>参数名</span></th>
								<th><span>类型</span></th>
								<th><span>参数说明</span></th>
								<th><span>备注</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>userId</span></td>
								<td><span>Integer</span></td>
								<td><span>操作的用户对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>bookId</span></td>
								<td><span>Integer</span></td>
								<td><span>操作的图书对应的id</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>time</span></td>
								<td><span>Datetime</span></td>
								<td><span>操作的时间</span></td>
								<td><span>不可为null</span></td>
							</tr>
							<tr>
								<td><span>operation</span></td>
								<td><span>Integer</span></td>
								<td><span>操作的名称</span></td>
								<td><span>不可为null</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h3 id='232-用户相关'><span>2.3.2 用户相关</span></h3>
				<h4 id='实时统计全站的用户注册数目'><span>实时统计全站的用户注册数目</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>统计全站用户数目</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/alluser</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端参数: 无；后端返回包含有Integer类型用户数目的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/' target='_blank'
										class='url'>http://localhost:8091/</a><span> user/alluser</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户表（user）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='每月新增用户数目'><span>每月新增用户数目</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>统计全站每月新增用户数目</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/monincre</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端参数: 无；后端返回包含有Integer类型用户新增数目的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/' target='_blank'
										class='url'>http://localhost:8091/</a><span> user/ monincre</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户表（user）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='日活月活数目'><span>日活、月活数目</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>统计全站日活数目</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/dayalive</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端参数: 无；后端返回包含有Integer类型日活数目的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/' target='_blank'
										class='url'>http://localhost:8091/</a><span> user/ dayalive</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户表（user）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>统计全站月活数目</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/monalive</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端参数: 无；后端返回包含有Integer类型月活数目的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/' target='_blank'
										class='url'>http://localhost:8091/</a><span> user/ monalive</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户表（user）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
				<h4 id='实时在线人数'><span>实时在线人数</span></h4>
				<figure>
					<table>
						<thead>
							<tr>
								<th><span>功能描述</span></th>
								<th><span>统计全站的在线人数</span></th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><span>请求路径</span></td>
								<td><span>/user/online</span></td>
							</tr>
							<tr>
								<td><span>请求类型</span></td>
								<td><span>get</span></td>
							</tr>
							<tr>
								<td><span>请求参数</span></td>
								<td><span>前端参数: 无；后端返回包含有Integer类型在线人数的SysResult对象</span></td>
							</tr>
							<tr>
								<td><span>示例</span></td>
								<td><a href='http://localhost:8091/' target='_blank'
										class='url'>http://localhost:8091/</a><span> user/ online</span></td>
							</tr>
							<tr>
								<td><span>涉及表</span></td>
								<td><span>用户表（user）</span></td>
							</tr>
						</tbody>
					</table>
				</figure>
			</div>
		</div>
	</body>
</html>
